import { RequestConfig, history } from 'umi';
import { RequestOptionsInit, extend } from 'umi-request';
import { logout, resetUrl } from '@/utils';
import { notification } from 'antd';

const errorHandler = (error: any) => {
  const { response, data } = error;

  const codeMessage: any = {
    200: '服务器成功返回请求的数据。',
    201: '新建或修改数据成功。',
    202: '一个请求已经进入后台排队（异步任务）。',
    204: '删除数据成功。',
    400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
    401: '试图访问未授权资源，已被禁止！',
    403: '用户得到授权，但是访问被禁止。',
    404: '请求的资源地址不存在，请联系管理员！',
    406: '请求的格式不可得。',
    410: '请求的资源被永久删除，且不会再得到的。',
    417: '无法找到指定路径，文件下载失败！',
    422: '当创建一个对象时，发生一个验证错误。',
    500: '服务器发生错误，请检查服务器。',
    502: '网关错误。',
    503: '服务宕机，未启动。',
    504: '网关超时。',
    900: '登录状态失效，请重新登录！',
    901: '授权码失效，请重新登录！',
    903: '服务不可用，服务器暂时过载或维护。',
  };

  const errorText = codeMessage[response?.status] || response?.statusText;

  if (data && data?.status) {
    notification.error({
      message: codeMessage[data?.status],
    });

    if (data?.status === 900 || data?.status === 901) {
      //session过期处理 //跳转到登录页
      logout('hrky');
    }

    return {
      ...data,
      msg: codeMessage[data?.status],
    };
  }

  if (response && response.status) {
    notification.error({
      message: errorText,
    });
    return {
      ...data,
      success: false,
      status: response?.status,
      msg: response?.errorText,
    };
  } else if (!response) {
    notification.error({
      description: '您的网络发生异常，无法连接服务器',
      message: '网络异常',
    });
    return {
      ...data,
      success: false,
      status: response?.status,
      msg: '您的网络发生异常，无法连接服务器',
    };
  }
};

// 请求拦截
function requestInterceptors(url: string, options: RequestOptionsInit) {
  // 设置代理前缀/ap
  const newUrl = url?.includes('/convert/common' || '/settingDocPrintNumByName' || '/api/getDocPrintNumByType' || '/ofd/read/showFile')
    ? url
    : resetUrl(`${url}`); //请求地址后面加上随机数字
  // const newUrl = resetUrl(`${url}`); //请求地址后面加上随机数字

  const data: any = options?.data;

  const newOption = options;

  if (data && Object?.keys(data)?.length > 0) {
    //更改请求参数
    if (data?.current) {
      data.page = data?.current;

      delete data.current;
    }
    if (data?.pageSize) {
      data.rows = data?.pageSize;

      delete data.pageSize;
    }
  }

  newOption['data'] = data;

  return {
    url: newUrl,
    options: newOption,
  };
}

export const request: RequestConfig = {
  timeout: 90000,
  errorHandler, //网络请求错误处理
  requestInterceptors: [requestInterceptors],
  errorConfig: {
    adaptor: (resData) => {
      return {
        ...resData,
        success: true,
        errorMessage: '请求错误',
      };
    },
  },
};
